
/*
 * Other.c
 *
 *  Created on: Jun 10, 2024
 *      Author: Liangmiyi
 */
#include <MY_INC/PHY/PHY_RMS.h>

/**
 * @brief RMS计算函数
 * @param RMS RMS状态结构体指针
 * @param Ac_input 输入值
 * @return RMS输出值
 */
float RMS(RMS_Typedef *RMS, float Ac_input)
{
    // 计算当前输入值的平方
    float in_temp = Ac_input * Ac_input * (1.0f / RMS_WINDOW_SIZE); //(1.0f / RMS_WINDOW_SIZE)缩放倍数
    // 使用递归公式更新 sum_qua
    RMS->Sum_qua = RMS->Sum_qua - RMS->In_qua[RMS->Cnt] + in_temp;
    // 更新窗口中的平方值
    RMS->In_qua[RMS->Cnt] = in_temp;
    RMS->Cnt = (RMS->Cnt + 1) % RMS_WINDOW_SIZE; // 更新计数器
    // 计算 RMS 值
    return sqrtf(RMS->Sum_qua); // 返回 RMS 值
}